home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 March / PCWMAR09.iso / Software / Freeware / Adobe Media Player 1.6 / adobe_media_player.air / AMP.swf / scripts / mx / managers / DragManagerImpl.as < prev    next >
Encoding:
Text File  |  2008-11-25  |  11.6 KB  |  336 lines

  1. package mx.managers
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.Event;
  5.    import flash.events.IEventDispatcher;
  6.    import flash.events.MouseEvent;
  7.    import flash.geom.Point;
  8.    import mx.core.DragSource;
  9.    import mx.core.IFlexDisplayObject;
  10.    import mx.core.IUIComponent;
  11.    import mx.core.UIComponentGlobals;
  12.    import mx.core.mx_internal;
  13.    import mx.events.DragEvent;
  14.    import mx.events.InterDragManagerEvent;
  15.    import mx.events.InterManagerRequest;
  16.    import mx.managers.dragClasses.DragProxy;
  17.    import mx.styles.CSSStyleDeclaration;
  18.    import mx.styles.StyleManager;
  19.    
  20.    use namespace mx_internal;
  21.    
  22.    public class DragManagerImpl implements IDragManager
  23.    {
  24.       private static var instance:IDragManager;
  25.       
  26.       private static var sm:ISystemManager;
  27.       
  28.       mx_internal static const VERSION:String = "3.2.0.3958";
  29.       
  30.       private var bDoingDrag:Boolean = false;
  31.       
  32.       private var sandboxRoot:IEventDispatcher;
  33.       
  34.       public var dragProxy:DragProxy;
  35.       
  36.       private var dragInitiator:IUIComponent;
  37.       
  38.       private var mouseIsDown:Boolean = false;
  39.       
  40.       public function DragManagerImpl()
  41.       {
  42.          var _loc1_:IEventDispatcher = null;
  43.          super();
  44.          if(instance)
  45.          {
  46.             throw new Error("Instance already exists.");
  47.          }
  48.          if(!sm.isTopLevelRoot())
  49.          {
  50.             sandboxRoot = sm.getSandboxRoot();
  51.             sandboxRoot.addEventListener(InterDragManagerEvent.DISPATCH_DRAG_EVENT,marshalDispatchEventHandler,false,0,true);
  52.          }
  53.          else
  54.          {
  55.             _loc1_ = sm;
  56.             _loc1_.addEventListener(MouseEvent.MOUSE_DOWN,sm_mouseDownHandler,false,0,true);
  57.             _loc1_.addEventListener(MouseEvent.MOUSE_UP,sm_mouseUpHandler,false,0,true);
  58.             sandboxRoot = sm;
  59.             sandboxRoot.addEventListener(InterDragManagerEvent.DISPATCH_DRAG_EVENT,marshalDispatchEventHandler,false,0,true);
  60.          }
  61.          sandboxRoot.addEventListener(InterManagerRequest.DRAG_MANAGER_REQUEST,marshalDragManagerHandler,false,0,true);
  62.          var _loc2_:InterManagerRequest = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  63.          _loc2_.name = "update";
  64.          sandboxRoot.dispatchEvent(_loc2_);
  65.       }
  66.       
  67.       public static function getInstance() : IDragManager
  68.       {
  69.          if(!instance)
  70.          {
  71.             sm = SystemManagerGlobals.topLevelSystemManagers[0];
  72.             instance = new DragManagerImpl();
  73.          }
  74.          return instance;
  75.       }
  76.       
  77.       private function marshalDragManagerHandler(param1:Event) : void
  78.       {
  79.          var _loc3_:InterManagerRequest = null;
  80.          if(param1 is InterManagerRequest)
  81.          {
  82.             return;
  83.          }
  84.          var _loc2_:Object = param1;
  85.          switch(_loc2_.name)
  86.          {
  87.             case "isDragging":
  88.                bDoingDrag = _loc2_.value;
  89.                break;
  90.             case "acceptDragDrop":
  91.                if(dragProxy)
  92.                {
  93.                   dragProxy.target = _loc2_.value;
  94.                }
  95.                break;
  96.             case "showFeedback":
  97.                if(dragProxy)
  98.                {
  99.                   showFeedback(_loc2_.value);
  100.                }
  101.                break;
  102.             case "getFeedback":
  103.                if(dragProxy)
  104.                {
  105.                   _loc2_.value = getFeedback();
  106.                }
  107.                break;
  108.             case "endDrag":
  109.                endDrag();
  110.                break;
  111.             case "update":
  112.                if(Boolean(dragProxy) && isDragging)
  113.                {
  114.                   _loc3_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  115.                   _loc3_.name = "isDragging";
  116.                   _loc3_.value = true;
  117.                   sandboxRoot.dispatchEvent(_loc3_);
  118.                }
  119.          }
  120.       }
  121.       
  122.       private function sm_mouseUpHandler(param1:MouseEvent) : void
  123.       {
  124.          mouseIsDown = false;
  125.       }
  126.       
  127.       public function get isDragging() : Boolean
  128.       {
  129.          return bDoingDrag;
  130.       }
  131.       
  132.       public function doDrag(param1:IUIComponent, param2:DragSource, param3:MouseEvent, param4:IFlexDisplayObject = null, param5:Number = 0, param6:Number = 0, param7:Number = 0.5, param8:Boolean = true) : void
  133.       {
  134.          var _loc9_:Number = NaN;
  135.          var _loc10_:Number = NaN;
  136.          var _loc18_:CSSStyleDeclaration = null;
  137.          var _loc19_:Class = null;
  138.          if(bDoingDrag)
  139.          {
  140.             return;
  141.          }
  142.          if(!(param3.type == MouseEvent.MOUSE_DOWN || param3.type == MouseEvent.CLICK || mouseIsDown || param3.buttonDown))
  143.          {
  144.             return;
  145.          }
  146.          bDoingDrag = true;
  147.          var _loc11_:InterManagerRequest = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  148.          _loc11_.name = "isDragging";
  149.          _loc11_.value = true;
  150.          sandboxRoot.dispatchEvent(_loc11_);
  151.          _loc11_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  152.          _loc11_.name = "mouseShield";
  153.          _loc11_.value = true;
  154.          sandboxRoot.dispatchEvent(_loc11_);
  155.          this.dragInitiator = param1;
  156.          dragProxy = new DragProxy(param1,param2);
  157.          sm.addChildToSandboxRoot("popUpChildren",dragProxy);
  158.          if(!param4)
  159.          {
  160.             _loc18_ = StyleManager.getStyleDeclaration("DragManager");
  161.             _loc19_ = _loc18_.getStyle("defaultDragImageSkin");
  162.             param4 = new _loc19_();
  163.             dragProxy.addChild(DisplayObject(param4));
  164.             _loc9_ = Number(param1.width);
  165.             _loc10_ = Number(param1.height);
  166.          }
  167.          else
  168.          {
  169.             dragProxy.addChild(DisplayObject(param4));
  170.             if(param4 is ILayoutManagerClient)
  171.             {
  172.                UIComponentGlobals.mx_internal::layoutManager.validateClient(ILayoutManagerClient(param4),true);
  173.             }
  174.             if(param4 is IUIComponent)
  175.             {
  176.                _loc9_ = Number((param4 as IUIComponent).getExplicitOrMeasuredWidth());
  177.                _loc10_ = Number((param4 as IUIComponent).getExplicitOrMeasuredHeight());
  178.             }
  179.             else
  180.             {
  181.                _loc9_ = Number(param4.measuredWidth);
  182.                _loc10_ = Number(param4.measuredHeight);
  183.             }
  184.          }
  185.          param4.setActualSize(_loc9_,_loc10_);
  186.          dragProxy.setActualSize(_loc9_,_loc10_);
  187.          dragProxy.alpha = param7;
  188.          dragProxy.allowMove = param8;
  189.          var _loc12_:Object = param3.target;
  190.          if(_loc12_ == null)
  191.          {
  192.             _loc12_ = param1;
  193.          }
  194.          var _loc13_:Point = new Point(param3.localX,param3.localY);
  195.          _loc13_ = DisplayObject(_loc12_).localToGlobal(_loc13_);
  196.          _loc13_ = DisplayObject(sandboxRoot).globalToLocal(_loc13_);
  197.          var _loc14_:Number = _loc13_.x;
  198.          var _loc15_:Number = _loc13_.y;
  199.          var _loc16_:Point = DisplayObject(_loc12_).localToGlobal(new Point(param3.localX,param3.localY));
  200.          _loc16_ = DisplayObject(param1).globalToLocal(_loc16_);
  201.          dragProxy.xOffset = _loc16_.x + param5;
  202.          dragProxy.yOffset = _loc16_.y + param6;
  203.          dragProxy.x = _loc14_ - dragProxy.xOffset;
  204.          dragProxy.y = _loc15_ - dragProxy.yOffset;
  205.          dragProxy.startX = dragProxy.x;
  206.          dragProxy.startY = dragProxy.y;
  207.          if(param4 is DisplayObject)
  208.          {
  209.             DisplayObject(param4).cacheAsBitmap = true;
  210.          }
  211.          var _loc17_:Object = dragProxy.automationDelegate;
  212.          if(_loc17_)
  213.          {
  214.             _loc17_.recordAutomatableDragStart(param1,param3);
  215.          }
  216.       }
  217.       
  218.       private function sm_mouseDownHandler(param1:MouseEvent) : void
  219.       {
  220.          mouseIsDown = true;
  221.       }
  222.       
  223.       public function showFeedback(param1:String) : void
  224.       {
  225.          var _loc2_:InterManagerRequest = null;
  226.          if(dragProxy)
  227.          {
  228.             if(param1 == DragManager.MOVE && !dragProxy.allowMove)
  229.             {
  230.                param1 = DragManager.COPY;
  231.             }
  232.             dragProxy.action = param1;
  233.          }
  234.          else if(isDragging)
  235.          {
  236.             _loc2_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  237.             _loc2_.name = "showFeedback";
  238.             _loc2_.value = param1;
  239.             sandboxRoot.dispatchEvent(_loc2_);
  240.          }
  241.       }
  242.       
  243.       public function acceptDragDrop(param1:IUIComponent) : void
  244.       {
  245.          var _loc2_:InterManagerRequest = null;
  246.          if(dragProxy)
  247.          {
  248.             dragProxy.target = param1 as DisplayObject;
  249.          }
  250.          else if(isDragging)
  251.          {
  252.             _loc2_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  253.             _loc2_.name = "acceptDragDrop";
  254.             _loc2_.value = param1;
  255.             sandboxRoot.dispatchEvent(_loc2_);
  256.          }
  257.       }
  258.       
  259.       private function marshalDispatchEventHandler(param1:Event) : void
  260.       {
  261.          if(param1 is InterDragManagerEvent)
  262.          {
  263.             return;
  264.          }
  265.          var _loc2_:Object = param1;
  266.          var _loc3_:DisplayObject = SystemManager.getSWFRoot(_loc2_.dropTarget);
  267.          if(!_loc3_)
  268.          {
  269.             return;
  270.          }
  271.          var _loc4_:DragEvent = new DragEvent(_loc2_.dragEventType,_loc2_.bubbles,_loc2_.cancelable);
  272.          _loc4_.localX = _loc2_.localX;
  273.          _loc4_.localY = _loc2_.localY;
  274.          _loc4_.action = _loc2_.action;
  275.          _loc4_.ctrlKey = _loc2_.ctrlKey;
  276.          _loc4_.altKey = _loc2_.altKey;
  277.          _loc4_.shiftKey = _loc2_.shiftKey;
  278.          _loc4_.draggedItem = _loc2_.draggedItem;
  279.          _loc4_.dragSource = new DragSource();
  280.          var _loc5_:Array = _loc2_.dragSource.formats;
  281.          var _loc6_:int = int(_loc5_.length);
  282.          var _loc7_:int = 0;
  283.          while(_loc7_ < _loc6_)
  284.          {
  285.             _loc4_.dragSource.addData(_loc2_.dragSource.dataForFormat(_loc5_[_loc7_]),_loc5_[_loc7_]);
  286.             _loc7_++;
  287.          }
  288.          if(!_loc2_.dropTarget.dispatchEvent(_loc4_))
  289.          {
  290.             param1.preventDefault();
  291.          }
  292.       }
  293.       
  294.       public function getFeedback() : String
  295.       {
  296.          var _loc1_:InterManagerRequest = null;
  297.          if(!dragProxy && isDragging)
  298.          {
  299.             _loc1_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  300.             _loc1_.name = "getFeedback";
  301.             sandboxRoot.dispatchEvent(_loc1_);
  302.             return _loc1_.value as String;
  303.          }
  304.          return !!dragProxy ? dragProxy.action : DragManager.NONE;
  305.       }
  306.       
  307.       public function endDrag() : void
  308.       {
  309.          var _loc1_:InterManagerRequest = null;
  310.          if(dragProxy)
  311.          {
  312.             sm.removeChildFromSandboxRoot("popUpChildren",dragProxy);
  313.             dragProxy.removeChildAt(0);
  314.             dragProxy = null;
  315.          }
  316.          else if(isDragging)
  317.          {
  318.             _loc1_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  319.             _loc1_.name = "endDrag";
  320.             sandboxRoot.dispatchEvent(_loc1_);
  321.          }
  322.          _loc1_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  323.          _loc1_.name = "mouseShield";
  324.          _loc1_.value = false;
  325.          sandboxRoot.dispatchEvent(_loc1_);
  326.          dragInitiator = null;
  327.          bDoingDrag = false;
  328.          _loc1_ = new InterManagerRequest(InterManagerRequest.DRAG_MANAGER_REQUEST);
  329.          _loc1_.name = "isDragging";
  330.          _loc1_.value = false;
  331.          sandboxRoot.dispatchEvent(_loc1_);
  332.       }
  333.    }
  334. }
  335.  
  336.